package com.tdt.alarm.model;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Calendar;
import java.util.List;

import android.os.Environment;

public class Utils {
	public static final String AM = "AM";
	public static final String PM = "PM";

//	// ghi đối tượng alarm xuống file
//	public static void writeAlarmToFile(SetAlarm alarm) {
//		File sdcard = Environment.getExternalStorageDirectory();
//		File dir = new File(sdcard.getAbsolutePath() + "/Alarm/");
//		dir.mkdir();
//		File file = new File(dir, "alarms.txt");
//		// writeFile
//		try {
//			int checkActive;
//			if (alarm.isCheckActive()) {
//				checkActive = 1;
//			} else
//				checkActive = 0;
//			FileOutputStream fos = new FileOutputStream(file, true);
//			PrintWriter pw = new PrintWriter(fos);
//			pw.println(alarm.getTime().getHour() + "--"
//					+ alarm.getTime().getMinute() + "--"
//					+ alarm.getTime().getSecond() + "--" + checkActive+"--"+alarm.getLabel());
//			pw.close();
//		} catch (FileNotFoundException e) {
//			e.printStackTrace();
//		}
//	}

//	// thay đổi chekbox thành kích hoạt hoặc không kích hoạt
//	public static void editAlarmList(List<SetAlarm> list, int pos,
//			boolean isActive) {
//		for (int i = 0; i < list.size(); i++) {
//			if (i == pos) {
//				list.get(i).setCheckActive(isActive);
//			}
//		}
//		// đảo ngược list để đúng với định dạng ban đầu
//		Collections.reverse(list);
//		updateFile(list);
//	}

//	// sửa thông tin của đối tượng trong file rồi xóa file ghi lại từ đầu
//	public static void updateFile(List<SetAlarm> list) {
//		File sdcard = Environment.getExternalStorageDirectory();
//		File dir = new File(sdcard.getAbsolutePath() + "/Alarm/");
//		dir.mkdir();
//		File file = new File(dir, "alarms.txt");
//		// writeFile
//		try {
//			FileOutputStream fos = new FileOutputStream(file);
//			PrintWriter pw = new PrintWriter(fos);
//			int checkActive;
//			for (int i = 0; i < list.size(); i++) {
//				if (list.get(i).isCheckActive()) {
//					checkActive = 1;
//				} else
//					checkActive = 0;
//				pw.println(list.get(i).getTime().getHour() + "--"
//						+ list.get(i).getTime().getMinute() + "--"
//						+ list.get(i).getTime().getSecond() + "--"
//						+ checkActive+"--"+list.get(i).getLabel());
//			}
//			pw.close();
//		} catch (FileNotFoundException e) {
//			e.printStackTrace();
//		}
//	}
	
	// trả về 1 đốitượng SetAlarm khi truyền vào 1 vị trí
	public static SetAlarm getCurrentAlarm(int pos, List<SetAlarm> list) {
		SetAlarm alarm = list.get(0);
		for (int i = 0; i < list.size(); i++) {
			if (i == pos)
				return list.get(i);
		}
		return alarm;
	}

//	// đọc file từ trên xuống, trả về kết quả đảo ngược (kết quả mới nhất lên
//	// trên)
//	public static List<SetAlarm> readFile() {
//		File sdcard = Environment.getExternalStorageDirectory();
//		File dir = new File(sdcard.getAbsolutePath() + "/Alarm/");
//		// dir.mkdir();
//		File file = new File(dir, "alarms.txt");
//		List<SetAlarm> list = new ArrayList<SetAlarm>();
//		String line;
//		BufferedReader br = null;
//		try {
//			br = new BufferedReader(new FileReader(file));
//			try {
//				while ((line = br.readLine()) != null) {
//					String[] s = line.split("--");
//					// System.out.println(Integer.parseInt(s[0]));
//					Time time = new Time();
//					time.setHour(Integer.parseInt(s[0]));
//					time.setMinute(Integer.parseInt(s[1]));
//					time.setSecond(Integer.parseInt(s[2]));
//
//					SetAlarm alarm = new SetAlarm();
//					alarm.setTime(time);
//					alarm.setCheckActive(Integer.parseInt(s[3]) == 1 ? true
//							: false);
//					alarm.setLabel(s[4]+"");
//					list.add(alarm);
//				}
//				br.close();
//			} catch (IOException e) {
//				System.out.println("Lỗi đọc file");
//				e.printStackTrace();
//			}
//		} catch (FileNotFoundException e) {
//			System.out.println("Lỗi bufered");
//			e.printStackTrace();
//		} finally {
//			if (br != null)
//				try {
//					br.close();
//				} catch (IOException e) {
//					e.printStackTrace();
//				}
//		}
//		Collections.reverse(list);
//		return list;
//	}

	// trả về danh sách đã sắp xếp theo thời gian báo thức gần nhất (chưa làm
	// xong)
	public static void sortByTimer(List<SetAlarm> list) {
		Calendar alarmPoint = null;
		for (int i = 0; i < list.size(); i++) {
			if (list.get(i).isCheckActive()) {
				alarmPoint = Calendar.getInstance();
				alarmPoint.set(2015, 10, 27, list.get(i).getTime().getHour(),
						list.get(i).getTime().getMinute());

				Calendar calendar = Calendar.getInstance();

				int distance = alarmPoint.get(Calendar.HOUR) * 3600
						+ alarmPoint.get(Calendar.MINUTE) * 60
						- calendar.get(Calendar.HOUR) * 3600
						- calendar.get(Calendar.MINUTE) * 60
						- calendar.get(Calendar.SECOND);
			}
		}
	}

	// trả về vị trí của alarm gần nhất sắp báo thức khi truyền vào 1 danh sách
	public static int getAlarmActiveFirst(List<SetAlarm> list) {
		int result = 0;
		int minTime = 86400;// số giây của 1 ngày (24h)
		int size = list.size();
		for (int i = 0; i < size; i++) {
			if (list.get(i).isCheckActive()) {
				Calendar calendar = Calendar.getInstance();// gọi giờ hệ thống
				int distance = list.get(i).getTime().getHour() * 3600
						+ list.get(i).getTime().getMinute() * 60
						- calendar.get(Calendar.HOUR_OF_DAY) * 3600
						- calendar.get(Calendar.MINUTE) * 60
						- calendar.get(Calendar.SECOND);
				if(distance <0){
					distance += 86400;
				}
				if (distance < minTime) {
					minTime = distance;
					result = i;
				}
			}
		}
		return result;
	}
	public static SetAlarm getAlarmRingFirst(List<SetAlarm> list) {
		int result = 0;
		SetAlarm alarmResult = null;
		int minTime = 86400;// số giây của 1 ngày (24h)
		int size = list.size();
		for (int i = 0; i < size; i++) {
			if (list.get(i).isCheckActive()) {
				Calendar calendar = Calendar.getInstance();// gọi giờ hệ thống
				int distance = list.get(i).getTime().getHour() * 3600
						+ list.get(i).getTime().getMinute() * 60
						- calendar.get(Calendar.HOUR_OF_DAY) * 3600
						- calendar.get(Calendar.MINUTE) * 60
						- calendar.get(Calendar.SECOND);
				if(distance <0){
					distance += 86400;
				}
				if (distance < minTime) {
					minTime = distance;
					result = i;
					alarmResult=list.get(i);
				}
			}
		}
		return alarmResult;
	}
	// đếm số alarm active
	public static int countActiveCurrent(List<SetAlarm> list) {
		
		int count = 0;
		for (int i = 0; list != null && i < list.size(); i++) {
			if (list.get(i).isCheckActive()) {
				count++;
			}
		}
		return count;
	}
	
	// ghi dia chi nhac chuong
		public static void writeAlarmToFile(String uri) {
			File sdcard = Environment.getExternalStorageDirectory();
			File dir = new File(sdcard.getAbsolutePath() + "/Alarm/");
			dir.mkdir();
			File file = new File(dir, "ringtoneUri.txt");
			// writeFile
			try {
				FileOutputStream fos = new FileOutputStream(file, false);
				PrintWriter pw = new PrintWriter(fos);
				pw.write(uri);
				pw.close();
			} catch (FileNotFoundException e) {
				e.printStackTrace();
			}
		}
		
		//doc uri nhac chuong tu file
		public static String readRingToneUri() {
			File sdcard = Environment.getExternalStorageDirectory();
			File dir = new File(sdcard.getAbsolutePath() + "/Alarm/");
			// dir.mkdir();
			String stringResult = "";
			File file = new File(dir, "ringtoneUri.txt");
			String line;
			BufferedReader br = null;
			try {
				br = new BufferedReader(new FileReader(file));
				try {
					while ((line = br.readLine()) != null) {
						stringResult = line;
					}
					br.close();
				} catch (IOException e) {
					System.out.println("Lỗi đọc file");
					e.printStackTrace();
				}
			} catch (FileNotFoundException e) {
				System.out.println("Lỗi bufered");
				e.printStackTrace();
			} finally {
				if (br != null)
					try {
						br.close();
					} catch (IOException e) {
						e.printStackTrace();
					}
			}
			return stringResult;
		}

}
